package com.ysm.freestyle.utils

import android.content.Context
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import com.ysm.freestyle.utils.ToastUtil.showShortToast


object PermissionUtils {



    fun checkPermissions(context: Context, vararg permissions: String):Boolean{
        return XXPermissions.isGrantedPermissions(context,permissions)
    }

    fun requestPermission(context: Context, vararg permissions: String,
                          requestSuccess: ()->Unit,
                          requestFail: (context:Context,permissions: MutableList<String> )->Unit ){
        XXPermissions.with(context)
            // 申请单个权限
            //permission(Permission.RECORD_AUDIO)
            // 申请多个权限
            .permission(permissions)
            // 设置权限请求拦截器（局部设置）
            //.interceptor(new PermissionInterceptor())
            // 设置不触发错误检测机制（局部设置）
            //.unchecked()
            .request(object : OnPermissionCallback {
                //全部授权成功进入下一步，如果没有全部授权成功，直接忽略
                override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {
                    if (!allGranted) {
                        showShortToast(context,"获取部分权限成功，但部分权限未正常授予")
                        return
                    }
                    requestSuccess()
                }

                //1、对于授权失败的权限组处理一般会有两次，第一次授权失败后，弹出页面提示，如果不授权就不能正常运行
                //2、再次进入权限请求，此时对于这些被拒绝过一次的权限，会直接提示 禁止后不再提示/始终允许
                //3、如果此时再次拒绝，直接停止即可，用户如果使用该功能，会再次点击，此时再次进行权限申请
                //4、申请发现已经被禁止且不允许提示，授权失败进入系统页面进行手动授权。
                //5、重复 直到用户全部权限检查通过才会进入到下一步
                override fun onDenied(permissions: MutableList<String>, doNotAskAgain: Boolean) {
                    if (doNotAskAgain) {
                        showShortToast(context,"被永久拒绝授权，请手动授予录音和日历权限")
                        // 如果是被永久拒绝就跳转到应用权限系统设置页面
                        XXPermissions.startPermissionActivity(context, permissions)
                    } else {
                        requestFail(context,permissions)
                    }
                }
            })
    }




    //Android 11以下的文件访问授权申请
    val fileRWPermission = arrayOf(
        Permission.WRITE_EXTERNAL_STORAGE,
        Permission.READ_EXTERNAL_STORAGE,
    )

    //所有文件的访问权限申请
    val allFilePermission = arrayOf(
        Permission.MANAGE_EXTERNAL_STORAGE,
    )

}

